package com.kabigon.handler;

import cn.hutool.core.util.StrUtil;
import com.kabigon.message.AuthRequest;
import com.kabigon.message.AuthResponse;
import com.kabigon.message.UserJoinNoticeRequest;
import com.kabigon.utils.WebSocketUtil;
import org.springframework.stereotype.Component;

import javax.websocket.Session;

/**
 * @author xu.biao
 * @version v1.0
 * @Package com.kabigon.handler
 * @data 2023/3/9 15:25
 */
@Component
public class AuthMessageHandler implements MessageHandler<AuthRequest> {
    @Override
    public void execute(Session session, AuthRequest message) {
        // 如果未传递 accessToken
        AuthResponse authResponse = new AuthResponse();

        if (StrUtil.isBlank(message.getAccessToken())) {
            authResponse.setCode(1);
            authResponse.setMessage("认证 accessToken 未传入");
            WebSocketUtil.send(session, AuthResponse.TYPE, authResponse);
            return;
        }

        //添加到 WebSocketUtil 中
        // 考虑到代码简化，我们先直接使用 accessToken 作为 User
        WebSocketUtil.addSession(session, message.getAccessToken());

        // 判断是否认证成功。这里，假装认证成功
        authResponse.setCode(0);
        authResponse.setMessage("认证 AccessToken 成功");
        WebSocketUtil.send(session, AuthResponse.TYPE, authResponse);

    //    通知所有人，某个人加入了。这是个可选逻辑。仅仅为了演示
        UserJoinNoticeRequest userJoinNoticeRequest = new UserJoinNoticeRequest();
        // 考虑到代码简化，我们先直接使用 accessToken 作为 User
        userJoinNoticeRequest.setNickname(message.getAccessToken());
        WebSocketUtil.broadcast(AuthResponse.TYPE, userJoinNoticeRequest);

    }

    @Override
    public String getType() {
        return AuthRequest.TYPE;
    }
}
